package com.zyf.project.binaryproto.converter;

import utils.binary.impl.BytesSlice;
import utils.binary.io.BytesOutputBuffer;

/**
 * <h1>动态值转换器</h1>
 * <p>继承于 {@link ValueConverter}，另外提供了 {@link #encode(Object, BytesOutputBuffer)} 和 {@link #decode(BytesSlice)} 两种方法</p>
 * <p>所谓的动态，就是指参数是可变长度的</p>
 *
 * @author Zhou Yifan
 */
public interface DynamicValueConverter extends ValueConverter {

    /**
     * 写入一个动态长度的值，以一个头部的长度字节开始
     *
     * @param value  待写入的值
     * @param buffer 目标缓存
     * @return 写入的字节数
     */
    int encode(Object value, BytesOutputBuffer buffer);

    /**
     * 数据片解码
     *
     * @param dataSlice 数据片
     * @return 解码后的对象
     */
    Object decode(BytesSlice dataSlice);

}
